﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using VP.Tools;
using Ext.Net;
using crm.model;
using System.Data;


namespace crm.aplicacao.CRMSystem
{
    public partial class GOportunidades : PaginaBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            verificarSeUsuarioEstaLogado();
            cboUsuario.SelectedItem.Value = UsuarioLogado.IdUsuario.ToString();
            cbResponsavelAtividade.SelectedItem.Value = UsuarioLogado.IdUsuario.ToString();

            if (!X.IsAjaxRequest)
            {
                carregarEmpresas();
                carregarContatos();
                carregarProdutos();
                carregarFases();
                carregarCampanhas();
                carregarUsuarios();
                carregarOportunidades();
                carregarAtividade();
            }
        }

        [DirectMethod]
        public void valida()
        {
            if (txtDescricaoOportunidade.Text == "" || cboEmpresaOportunidade.SelectedItem.Value == "" || cboContatoOportunidade.SelectedItem.Value == "" || cboFase.SelectedItem.Value == "" || cboFase.SelectedItem.Value == "" || cboCampanha.SelectedItem.Value == "")
            {
                WindowNovoOportunidade.Hide();
                WindowNovoOportunidade.Show();

            }
            else
            {
                inserirOportunidade();
            }
        }

        [DirectMethod]
        public void inserirOportunidade()
        {


            Oportunidade obj = new Oportunidade();

            obj.FkIdEmpresas = Convert.ToInt32(cboEmpresaOportunidade.SelectedItem.Value);
            obj.FkIdContatos = Convert.ToInt32(cboContatoOportunidade.SelectedItem.Value);
            obj.FkIdProdutos = Convert.ToInt32(cboProdutoOportunidade.SelectedItem.Value);
            obj.Descricao = txtDescricaoOportunidade.Text;
            obj.DataContato = dtContato.SelectedDate;
            obj.FkIdFases = Convert.ToInt32(cboFase.SelectedItem.Value);
            obj.FkIdCampanhas = Convert.ToInt32(cboCampanha.SelectedItem.Value);
            obj.FkIdUsuarios = Convert.ToInt32(cboUsuario.SelectedItem.Value);

            OportunidadeDao objDao = new OportunidadeDao();


            if (hdfIdOportunidades.Value.Equals(""))

                if (objDao.inserirOportunidade(obj))
                    X.Msg.Alert("Status", "Inserido com sucesso!").Show();
                else
                    X.Msg.Alert("Status", "Não foi possível inserir!").Show();

            else
            {
                var id = Convert.ToInt32(hdfIdOportunidades.Value);

                hdfIdOportunidades.Clear();

                obj = new Oportunidade() { IdOportunidades = id };
                obj.IdOportunidades = id;
                obj.FkIdEmpresas = Convert.ToInt32(cboEmpresaOportunidade.SelectedItem.Value);
                obj.FkIdContatos = Convert.ToInt32(cboContatoOportunidade.SelectedItem.Value);
                obj.FkIdProdutos = Convert.ToInt32(cboProdutoOportunidade.SelectedItem.Value);
                obj.Descricao = txtDescricaoOportunidade.Text;
                obj.DataContato = dtContato.SelectedDate;
                obj.FkIdFases = Convert.ToInt32(cboFase.SelectedItem.Value);
                obj.FkIdCampanhas = Convert.ToInt32(cboCampanha.SelectedItem.Value);
                obj.FkIdUsuarios = Convert.ToInt32(cboUsuario.SelectedItem.Value);

                if (new OportunidadeDao().atualizar(obj))
                    X.Msg.Alert("Status", "Atualizado com sucesso!").Show();
                else
                    X.Msg.Alert("Status", "Não foi possível atualizar!").Show();
            }

            WindowNovoOportunidade.Hide();

            carregarOportunidades();
        }
        [DirectMethod]
        public void editar()
        {
            RowSelectionModel sm = GridOportunidades.SelectionModel.Primary as RowSelectionModel;

            if (sm.SelectedRow == null)
            {
                X.Msg.Alert("Status", "Selecione um item").Show();
                return;
            }

            var id = Convert.ToInt32(sm.SelectedRow.RecordID);

            var dt = new OportunidadeDao().consultar(id);

            List<Oportunidade> lst = new List<Oportunidade>();

            foreach (DataRow dr in dt.Rows)
            {
                lst.Add(new Oportunidade()
                {
                    IdOportunidades = (int)dr["idOportunidades"],
                    Descricao = (string)dr["descricao"],
                    DataContato = (DateTime)dr["data_contato"],
                    FkIdEmpresas = (int)dr["fkidempresas"],
                    FkIdContatos = (int)dr["fkidcontatos"],
                    FkIdProdutos = (int)dr["fkidprodutos"],
                    FkIdFases = (int)dr["fkidfases"],
                    FkIdCampanhas = (int)dr["fkidcampanhas"],
                    FkIdUsuarios = (int)dr["fkidusuarios"]

                });
            }

            if (lst.Count == 0)
                return;

            var obj = lst[0];

            hdfIdOportunidades.Value = id.ToString();
            cboEmpresaOportunidade.SelectedItem.Value = obj.FkIdEmpresas.ToString();
            cboContatoOportunidade.SelectedItem.Value = obj.FkIdContatos.ToString();
            cboProdutoOportunidade.SelectedItem.Value = obj.FkIdProdutos.ToString();
            txtDescricaoOportunidade.Text = obj.Descricao;
            dtContato.SelectedValue = obj.DataContato.ToDateTime();
            cboFase.SelectedItem.Value = obj.FkIdFases.ToString();
            cboCampanha.SelectedItem.Value = obj.FkIdCampanhas.ToString();
            cboUsuario.SelectedItem.Value = obj.FkIdUsuarios.ToString();

            WindowNovoOportunidade.Show();

        }

        //Busca Avançada
        [DirectMethod]
        public void buscaAvancada()
        {
            if (chkAtiva.Checked && !chkGanha.Checked && !chkPerdida.Checked)
            {
                carregarOportunidades();     
            }
            if (chkGanha.Checked && !chkAtiva.Checked && !chkPerdida.Checked)
            {
                
                carregarOpG();

            }
            if (chkPerdida.Checked && !chkAtiva.Checked && !chkGanha.Checked)
            {
                carregarOpP();

            }
            if (chkAtiva.Checked && chkGanha.Checked && !chkPerdida.Checked)
            {
              //var txt = txtBuscar.Text;
              carregarOpAG();
            }
            if (chkAtiva.Checked && chkPerdida.Checked && !chkGanha.Checked)
            {
                carregarOpAP();
            }
            if (chkGanha.Checked && chkPerdida.Checked && !chkAtiva.Checked)
            {
                carregarOpGP();
            }
            if (chkGanha.Checked && chkPerdida.Checked && chkAtiva.Checked)
            {
                carregarOpAGP();
            } 
            if (!chkGanha.Checked && !chkPerdida.Checked && !chkAtiva.Checked)
            {
                X.Msg.Alert("Status", "Selecione uma opção").Show();
                return;
            }
        }

        [DirectMethod]
        public void reload()
        {
            cboContatoOportunidade.Text = "";
            var id = Convert.ToInt32(cboEmpresaOportunidade.SelectedItem.Value);
            carregarCboContatos(id);
            
        }
    

        //Abrir o Form de Atividade
        [DirectMethod]
        public void abrirAtividade()
        {
            RowSelectionModel sm = GridOportunidades.SelectionModel.Primary as RowSelectionModel;

            if (sm.SelectedRow == null)
            {
                X.Msg.Alert("Status", "Selecione uma oportunidade").Show();
                return;
            }

            var id = Convert.ToInt32(sm.SelectedRow.RecordID);

            var dt = new OportunidadeDao().consultar(id);

            List<Oportunidade> lst = new List<Oportunidade>();

            foreach (DataRow dr in dt.Rows)
            {
                lst.Add(new Oportunidade()
                {
                    IdOportunidades = (int)dr["idOportunidades"],
                    FkIdEmpresas = (int)dr["fkidempresas"],
                    FkIdContatos = (int)dr["fkidcontatos"],
                    FkIdProdutos = (int)dr["fkidprodutos"],
                    Descricao = (string)dr["descricao"],
                    DataContato = (DateTime)dr["data_contato"],
                    FkIdFases = (int)dr["fkidfases"],
                    FkIdCampanhas = (int)dr["fkidcampanhas"],
                    FkIdUsuarios = (int)dr["fkidusuarios"]

                });
            }

            if (lst.Count == 0)
                return;

            var obj = lst[0];

            cbEmpresa.SelectedItem.Value = obj.FkIdEmpresas.ToString();
            cbEmpresa.Disabled = true;
            WindowsAtividades.Show();
        }
        [DirectMethod]
        public void verificaAtividade()
        {
            if (txtDescricaoAtividade.Text == "" || dtRetorno.SelectedDate.Date == null)
            {
                X.Msg.Alert("Status", "Favor preencher os campos obrigatórios!").Show();
            }
            else
            {

                inserirAtividade();
            }


        }
        [DirectMethod]
        public void inserirAtividade()
        {


            RowSelectionModel sm = GridOportunidades.SelectionModel.Primary as RowSelectionModel;


            var id = Convert.ToInt32(sm.SelectedRow.RecordID);

            Atividade obj = new Atividade();
            obj.FkIdOportunidades = id;
            obj.FkIdEmpresas = Convert.ToInt32(cbEmpresa.SelectedItem.Value);
            obj.Descricao = txtDescricaoAtividade.Text;
            obj.DataRetorno = dtRetorno.SelectedDate.Date;
            obj.FkIdUsuarios = Convert.ToInt32(cbResponsavelAtividade.SelectedItem.Value);

            AtividadeDao objDao = new AtividadeDao();

            //if (obj.DescricaoAtividade == "")
            //    X.Msg.Alert("Alerta", "Favor preencher os campos obrigatórios").Show();

            //else 

            if (objDao.inserirAtividade(obj))
                X.Msg.Alert("Status", "Inserido com sucesso!").Show();
            else
                X.Msg.Alert("Status", "Não foi possível inserir!").Show();

            WindowsAtividades.Hide();

        }


        //Finalizar
        [DirectMethod]
        public void abrirFinalizar()
        {
            RowSelectionModel sm = GridOportunidades.SelectionModel.Primary as RowSelectionModel;

            if (sm.SelectedRow == null)
            {
                X.Msg.Alert("Status", "Selecione uma oportunidade").Show();
                return;
            }
            rdGanho.Checked = true;
            //var id = Convert.ToInt32(sm.SelectedRow.);

            WindowsFinalizar.Show();
        }

        [DirectMethod]
        public void finalizarOportunidade()
        {
            RowSelectionModel sm = GridOportunidades.SelectionModel.Primary as RowSelectionModel;

            if (sm.SelectedRow == null)
            {
                X.Msg.Alert("Status", "Selecione uma Atividade").Show();
                return;
            }

            var id = Convert.ToInt32(sm.SelectedRow.RecordID);

            Oportunidade obj = new Oportunidade();
            obj.IdOportunidades = id;
            obj.DataFinalizacao = dtFinalizado.SelectedDate.Date;
            obj.DescricaoFinalizado = txtDescricao.Text;

            if (rdGanho.Checked)
                obj.Status = 3;

            if (rdPerdida.Checked)
                obj.Status = 4;

            OportunidadeDao objDao = new OportunidadeDao();

            if (objDao.finalizarOportunidade(obj))
                X.Msg.Alert("Status", "Finalizado com sucesso!").Show();
            else
                X.Msg.Alert("Status", "Não foi possível Finalizar!").Show();



            WindowsFinalizar.Hide();
            carregarOportunidades();
        }

        //Historico
        [DirectMethod]
        public void historico()
        {
            RowSelectionModel sm = GridOportunidades.SelectionModel.Primary as RowSelectionModel;


            if (sm.SelectedRow == null)
            {
                X.Msg.Alert("Status", "Selecione um item").Show();
                return;
            }

            var id = Convert.ToInt32(sm.SelectedRow.RecordID);
            AtividadeDao objDao = new AtividadeDao();
            var dt = objDao.consultarHistorico();
            List<Atividade> lst = new List<Atividade>();
            foreach (DataRow dr in dt.Rows)
            {
                lst.Add(new Atividade()
                {
                    IdAtividade = (int)dr["idatividade"],
                    FkIdOportunidades = (int)dr["fkidoportunidades"],
                    Responsavel = dr["responsavel"].ToString(),
                    FkIdEmpresas = (int)dr["fkidempresas"].ToInt32(),
                    Descricao = dr["descricao"].ToString(),
                    Observacao = dr["observacaoatividade"] is DBNull ? "" : (String)dr["observacaoatividade"],
                    DataRetorno = dr["dataretorno"] is DBNull ? new Nullable<DateTime>() : (DateTime)dr["dataretorno"],
                    DataContato = dr["datacontato"] is DBNull ? new Nullable<DateTime>() : (DateTime)dr["dataretorno"],
                    DesOportunidade = dr["desOportunidade"].ToString(),
                    Produto = dr["produto"].ToString()

                });
            }
            if (lst.Count == 0)
            {
                X.Msg.Alert("Aviso", "Não existe atividades").Show();
                return;
            }
            else
            {
                List<Atividade> lstAux = new List<Atividade>();
                foreach (Atividade obj in lst)
                    if (obj.FkIdOportunidades == id)
                        lstAux.Add(obj);
                if (lstAux.Count == 0)
                {
                    X.Msg.Alert("Aviso", "Não existe atividades").Show();
                    return;
                }
                else
                {
                    //this.strHistorico.DataSource = lstAux;
                    //this.strHistorico.DataBind();

                    if (lstAux.Count == 0)
                    {
                        X.Msg.Alert("Aviso", "Não existe atividades").Show();
                        return;
                    }
                    else
                    {

                        this.strHistorico.DataSource = lstAux;
                        this.strHistorico.DataBind();

                        txtDescricaoHistorico.Text = "";
                        txtObservacaoHistorico.Text = "";
                        WindowsHistorico.Show();
                    }

                }
            }
        }

        protected void RowSelect(object sender, DirectEventArgs e)
        {


            RowSelectionModel sm = GridHistorico.SelectionModel.Primary as RowSelectionModel;


            var id = Convert.ToInt32(sm.SelectedRow.RecordID);
            var dt = new AtividadeDao().consultar(id);

            List<Atividade> lst = new List<Atividade>();

            foreach (DataRow dr in dt.Rows)
            {
                lst.Add(new Atividade()
                {
                    IdAtividade = (int)dr["idatividade"],
                    FkIdOportunidades = (int)dr["fkidoportunidades"],
                    FkIdEmpresas = (int)dr["fkidempresas"].ToInt32(),
                    Descricao = (string)dr["descricao"],
                    Observacao = dr["observacaoatividade"] is DBNull ? "" : (String)dr["observacaoatividade"],
                    DataRetorno = (DateTime)dr["dataretorno"],
                    DesOportunidade = dr["desOportunidade"].ToString(),
                    Produto = dr["produto"].ToString()


                });
            }

            if (lst.Count == 0)
                return;

            var obj = lst[0];

            txtDesOportunidade.Text = obj.DesOportunidade;
            txtDesOportunidade.Disabled = true;

            txtProdHistorico.Text = obj.Produto;
            txtProdHistorico.Disabled = true;

            txtDescricaoHistorico.Text = obj.Descricao;
            txtObservacaoHistorico.Text = obj.Observacao;
            id = 0;

        }

        protected void Store1_Refresh(object sender, StoreRefreshDataEventArgs e)
        {
            this.strHistorico.DataBind();
        }


        //Carregar 

        void carregarOpAG()
        {
            OportunidadeDao objDao = new OportunidadeDao();
            var dados = objDao.carregarOpAG();
            this.strOportunidades.DataSource = dados;
            this.strOportunidades.DataBind();
        }

        void carregarOpAP()
        {
            OportunidadeDao objDao = new OportunidadeDao();
            var dados = objDao.carregarOpAP();
            this.strOportunidades.DataSource = dados;
            this.strOportunidades.DataBind();
        }

        void carregarOpGP()
        {
            OportunidadeDao objDao = new OportunidadeDao();
            var dados = objDao.carregarOpGP();
            this.strOportunidades.DataSource = dados;
            this.strOportunidades.DataBind();
        }
        void carregarOpAGP()
        {
            OportunidadeDao objDao = new OportunidadeDao();
            var dados = objDao.carregarOpAGP();
            this.strOportunidades.DataSource = dados;
            this.strOportunidades.DataBind();
        }
        void carregarOpG()
        {
            OportunidadeDao objDao = new OportunidadeDao();
            var dados = objDao.carregarOpG();
            this.strOportunidades.DataSource = dados;
            this.strOportunidades.DataBind();
        }
        void carregarOpP()
        {
            OportunidadeDao objDao = new OportunidadeDao();
            var dados = objDao.carregarOpP();
            this.strOportunidades.DataSource = dados;
            this.strOportunidades.DataBind();
        }

        void carregarEmpresas()
        {
            EmpresasDao objDao = new EmpresasDao();
            var dados = objDao.consultar();
            this.strEmpresas.DataSource = dados;
            this.strEmpresas.DataBind();
        }
        void carregarContatos()
        {
            ContatosDao objDao = new ContatosDao();
            var dados = objDao.consultar();
            this.strContatos.DataSource = dados;
            this.strContatos.DataBind();
        }

        //combo contato

        void carregarCboContatos(int id)
        {
            ContatosDao objDao = new ContatosDao();
            var dados = objDao.carregarCboContatos(id);
            this.strContatos.DataSource = dados;
            this.strContatos.DataBind();
        }

        void carregarProdutos()
        {
            ProdutosDao objDao = new ProdutosDao();
            var dados = objDao.consultar();
            this.strProdutos.DataSource = dados;
            this.strProdutos.DataBind();
        }
        void carregarFases()
        {
            FasesDao objDao = new FasesDao();
            var dados = objDao.consultar();
            this.strFases.DataSource = dados;
            this.strFases.DataBind();
        }
        void carregarCampanhas()
        {
            CampanhasDao objDao = new CampanhasDao();
            var dados = objDao.consultar();
            this.strCampanhas.DataSource = dados;
            this.strCampanhas.DataBind();
        }
        void carregarUsuarios()
        {
            UsuarioDao objDao = new UsuarioDao();
            var dados = objDao.consultar();
            this.strUsuario.DataSource = dados;
            this.strUsuario.DataBind();
        }
        void carregarOportunidades()
        {
            OportunidadeDao objDao = new OportunidadeDao();
            var dados = objDao.consultar();
            this.strOportunidades.DataSource = dados;
            this.strOportunidades.DataBind();
        }

        void carregarAtividade()
        {
            AtividadeDao objDao = new AtividadeDao();
            var dados = objDao.consultarHistorico();
            this.strHistorico.DataSource = dados;
            this.strHistorico.DataBind();
        }


        [DirectMethod]
        public void limparCampoOportunidades()
        {
            this.cboEmpresaOportunidade.Text = "";
            this.cboContatoOportunidade.Text = "";
            this.cboProdutoOportunidade.Text = "";
            this.txtDescricaoOportunidade.Text = "";
            this.dtContato.Text = "";
            this.cboFase.Text = "";
            this.cboCampanha.Text = "";
        }

        [DirectMethod]
        public void limparCampoAtividade()
        {
            this.cbEmpresa.Text = "";
            this.txtDescricaoAtividade.Text = "";
            this.cboProdutoOportunidade.Text = "";
            this.dtRetorno.Text = "";
            this.cbResponsavelAtividade.Text = "";
        }

        [DirectMethod]
        public void limparFinalizar()
        {
            this.dtFinalizado.Text = "";
            this.txtDescricao.Text = "";
        }


    }
}